/**
 * 订单相关API接口
 */

import request from '../utils/request.js'
import { getCurrentUserId } from '../utils/userAuth.js'

export const orderApi = {
  /**
   * 创建订单
   * @param {Object} data - 订单数据
   * @param {Array} data.items - 订单商品列表
   * @param {Object} data.address - 收货地址
   * @param {string} data.paymentMethod - 支付方式
   * @param {string} data.orderType - 订单类型（personal/ship）
   * @param {string} data.shipId - 船舶ID（船舶订单必须）
   * @param {string} data.remark - 备注
   */
  createOrder(data) {
    return request.post('/user/orders', data)
  },

  /**
   * 获取订单列表
   * @param {Object} params - 查询参数
   * @param {number} params.page - 页码
   * @param {number} params.limit - 每页数量
   * @param {string} params.status - 订单状态
   * @param {string} params.orderType - 订单类型
   * @param {string} params.startDate - 开始日期
   * @param {string} params.endDate - 结束日期
   */
  getOrderList(params = {}) {
    return request.get('/user/orders', params)
  },

  /**
   * 获取订单详情
   * @param {string} orderId - 订单ID
   */
  getOrderDetail(orderId) {
    return request.get(`/user/orders/${orderId}`)
  },

  /**
   * 取消订单
   * @param {string} orderId - 订单ID
   * @param {string} reason - 取消原因
   */
  cancelOrder(orderId, reason) {
    return request.put(`/user/orders/${orderId}/cancel`, { reason })
  },

  /**
   * 确认收货
   * @param {string} orderId - 订单ID
   */
  confirmReceipt(orderId) {
    return request.put(`/user/orders/${orderId}/confirm-receipt`)
  },

  /**
   * 申请退款/售后
   * @param {string} orderId - 订单ID
   * @param {Object} data - 售后数据
   * @param {string} data.type - 售后类型（refund/exchange/repair）
   * @param {string} data.reason - 售后原因
   * @param {string} data.description - 描述
   * @param {Array} data.images - 凭证图片
   */
  applyAfterSale(orderId, data) {
    return request.post(`/user/orders/${orderId}/after-sale`, data)
  },

  /**
   * 获取订单状态统计
   */
  getOrderCounts() {
    return request.get('/user/orders/counts')
  },

  /**
   * 获取物流信息
   * @param {string} orderId - 订单ID
   */
  getLogistics(orderId) {
    return request.get(`/user/orders/${orderId}/logistics`)
  },

  /**
   * 延长收货时间
   * @param {string} orderId - 订单ID
   * @param {number} days - 延长天数
   */
  extendReceiptTime(orderId, days) {
    return request.put(`/user/orders/${orderId}/extend-receipt`, { days })
  },

  /**
   * 订单评价
   * @param {string} orderId - 订单ID
   * @param {Object} data - 评价数据
   * @param {Array} data.items - 商品评价列表
   * @param {number} data.serviceRating - 服务评分
   * @param {string} data.serviceComment - 服务评价
   */
  evaluateOrder(orderId, data) {
    return request.post(`/user/orders/${orderId}/evaluate`, data)
  },

  /**
   * 获取可评价订单列表
   * @param {Object} params - 查询参数
   */
  getEvaluatableOrders(params = {}) {
    return request.get('/user/orders/evaluatable', params)
  },

  /**
   * 重新购买
   * @param {string} orderId - 订单ID
   */
  reorder(orderId) {
    return request.post(`/user/orders/${orderId}/reorder`)
  },

  /**
   * 获取订单统计数据
   * @param {Object} params - 查询参数
   * @param {string} params.timeRange - 时间范围
   */
  getOrderStats(params = {}) {
    return request.get('/user/orders/stats', params)
  },

  /**
   * 获取订单发票
   * @param {string} orderId - 订单ID
   */
  getOrderInvoice(orderId) {
    return request.get(`/user/orders/${orderId}/invoice`)
  },

  /**
   * 申请开票
   * @param {string} orderId - 订单ID
   * @param {Object} data - 开票信息
   * @param {string} data.type - 发票类型
   * @param {string} data.title - 发票抬头
   * @param {string} data.taxNumber - 纳税人识别号
   * @param {string} data.email - 接收邮箱
   */
  applyInvoice(orderId, data) {
    return request.post(`/user/orders/${orderId}/invoice`, data)
  },

  /**
   * 订单备注
   * @param {string} orderId - 订单ID
   * @param {string} remark - 备注内容
   */
  addOrderRemark(orderId, remark) {
    return request.put(`/user/orders/${orderId}/remark`, { remark })
  },

  /**
   * 获取订单状态统计（兼容旧前端方法名）
   */
  getOrderStatistics() {
    const userId = getCurrentUserId()
    
    return request.get('/user/users/orders/statistics', {
      userId
    })
  },

  /**
   * 获取用户订单列表（兼容旧前端接口）
   * @param {Object} params - 查询参数
   * @param {number} params.status - 订单状态（可选：0=待付款 1=配货中 2=送货中 3=已完成 4=异常）
   * @param {string} params.orderNo - 订单号（可选，用于搜索）
   * @param {number} params.page - 页码（默认1）
   * @param {number} params.size - 每页大小（默认10）
   */
  getUserOrders(params = {}) {
    const userId = getCurrentUserId()
    
    const queryParams = {
      userId,
      page: 1,
      size: 10,
      ...params
    }
    
    return request.get('/user/users/orders', queryParams)
  },

  /**
   * 获取订单详情（兼容旧前端接口）
   * @param {number} orderId - 订单ID
   */
  getOrderDetailById(orderId) {
    const userId = getCurrentUserId()

    if (!orderId) {
      throw new Error('订单ID不能为空')
    }

    return request.get('/user/users/order/detail', {
      orderId,
      userId
    })
  },

  /**
   * 获取订单详情（统一适配，自动降级多个后端地址）
   * 优先尝试：/user/orders/{id}
   * 失败后尝试：/user/users/order/detail?orderId=...&userId=...
   * 再失败尝试：/user/users/orders/detail?orderId=...&userId=...
   */
  async getOrderDetailUnified(orderId) {
    const userId = getCurrentUserId()
    if (!orderId) throw new Error('订单ID不能为空')

    // 1) 新风格接口
    try {
      return await request.get(`/user/orders/${orderId}`)
    } catch (e1) {
      // 2) 旧接口（单数）
      try {
        return await request.get('/user/users/order/detail', { orderId, userId })
      } catch (e2) {
        // 3) 旧接口（复数）
        return await request.get('/user/users/orders/detail', { orderId, userId })
      }
    }
  }
}

export default orderApi